<?php
namespace app\api\behavior;
use think\Cookie;
use think\Cache;
use think\Db;

use think\Controller;

class Rule extends Controller{
	//用于保存用户信息 角色ID 权限信息
	public $user  = array();
	//判断是否需要验证
	public $is_check_rule = true;

	public function run()
    {
        //缓存配置
        $options = [
        	// 缓存类型为File
		    'type'  =>  'File', 
		    // 缓存有效期为永久有效
		    'expire'=>  0, 
		    //缓存前缀
		    'prefix'=>  'think_',
        ];
        Cache::connect($options);

        //1.权限认证
        //获取并赋值用户信息 在模型中的admin.php存入cookie值
        $admin = Cookie::get('admin');
        //获取并赋值用户id 在模型中的admin.php存入cookie值
        $id = Cookie::get('id');
        //读取当前用户对应文件文件信息
        $this->user = Cache::get('user'.$id);
        if (!$this->user) {
        	//保存用户信息
        	$this->user[] = $admin;
        	//查询角色ID role_id 根据role_id 查询权限
        	$role_info = Db::name('admin_role')->field('role_id')->where('admin_id',$id)->find();
        	//将角色ID存到user
        	$this->user['role_id'] = $role_info['role_id'];
        	
        	//判断是否是超级管理员 
        	if($this->user['role_id'] == 1){
        		//超级管理员 拥有所有权限
        		$this->is_check_rule = false;
        		$rule_list = Db::name('rule')->select();

        	}else{
        		//普通管理员或教师
        		
        		//取出权限id
        		$role_id = $this->user['role_id'];
        		$rules =  Db::name('role_rule')->field('rule_id')->where("role_id in ($role_id)")->select();
        		// dump($rules);die;

        		foreach ($rules as $key => $value) {
        			$rules_ids[] = $value['rule_id'];
        		}

        		$rules_ids = implode(',',$rules_ids);
        		$rule_list =  Db::name('rule')->where("id in ($rules_ids)")->select();
        		// dump($rule_list);

        	}

        	foreach ($rule_list as $key => $value) {
        		$this->user['rules'][] = strtolower($value['module_name'].'/'.$value['controller_name'].'/'.$value['action_name']);

        		if($value['is_show'] == 1){
        			$this->user['menus'][] = $value;
        		}
        	}

        	

        	Cache::set('user_'.$id,$this->user);
        	// dump($this->user);die;
        }


        //2.真正权限管理
        //判断是否是超级管理员
        if($this->user['role_id'] == 1){
        	//把所有权限给超级管理员
        	$this->is_check_rule = false;
        }
        //进入菜单后进行权限管理
        if($this->is_check_rule){
        	//所有角色都具备以下两个权限
        	$this->user['rules'][] = 'admin/index/index';
        	$this->user['rules'][] = 'admin/index/welcome';
        	//获取到用户访问地址(模块/控制器/方法)
        	$action = strtolower(request()->module().'/'.request()->controller().'/'.request()->action());
        	//用户请求的地址与权限进行比较
        	if(!in_array($action,$this->user['rules'])){

        		if(request()->isAjax()){
        			return json(array('code'=>0,'msg'=>'没有权限'));
        		}else{
        			$this->error("没有权限","index/index");
        			
        		}
        	}
        }

    }
}